home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 10 / FM Towns Free Software Collection 10.iso / fb386 / lib / blb / window.blb < prev   
Text File  |  1995-02-15  |  10KB  |  171 lines

  1. 60800 '-------------------- Windowライブラリ version 1.30 (16色画面用) ---------------------
  2. 60801 *BLB_WIN_INIT
  3. 60802  '入力 BLB_RESO_X    ・・・ 画面解像度(横ドット数)
  4. 60803  '     BLB_RESO_Y    ・・・ 画面解像度(縦ドット数)
  5. 60804  '     BLB_WIN_MAX   ・・・ 最大ウィンドウ数(255未満・0のとき自動設定)
  6. 60805  VIEW(0,0)-(BLB_RESO_X-1,BLB_RESO_Y-1):WINDOW(0,0)-(BLB_RESO_X-1,BLB_RESO_Y-1)
  7. 60806  COLOR 7,0,7,4:CONSOLE 0,25,0:LINE(0,-(BLB_MENUBAR_XLONG%>0)*20)-(1023,767),PSET,%6,BF
  8. 60807  MOUSEPAT=0:GOSUB *BLB_MOUSEPAT
  9. 60808  BLB_WINMEM&=BLB_RESO_X*BLB_RESO_Y/4
  10. 60809  IF BLB_WIN_MAX=0 THEN BLB_WIN_MAX=((FRE(3)-200000)*.8!)\BLB_WINMEM&*2
  11. 60810  BLB_WIN$="":BLB_WIN_EXIST$=STRING$(BLB_WIN_MAX,"0")
  12. 60811  BLB_MEM%(0)=9:ERASE BLB_MEM%:BLB_WINPTN%(0)=0:ERASE BLB_WINPTN%
  13. 60812  DIM BLB_WIN%(BLB_WIN_MAX,9),BLB_WINTITLE$(BLB_WIN_MAX),BLB_MEM%(78000)
  14. 60813  DIM BLB_WINPTN%(BLB_WINMEM&*(BLB_WIN_MAX+1)-1)
  15. 60814  RETURN
  16. 60815 *BLB_WIN_POS
  17. 60816  IF BLB_WIN$="" THEN W=-1:RETURN
  18. 60817  FOR I%=1 TO LEN(BLB_WIN$):A%=ASC(MID$(BLB_WIN$,I%,1))-1
  19. 60818   IF X<BLB_WIN%(A%,0) OR X>=BLB_WIN%(A%,0)+BLB_WIN%(A%,2) OR Y<BLB_WIN%(A%,1) OR Y>=BLB_WIN%(A%,1)+BLB_WIN%(A%,3) THEN NEXT:W=-1:RETURN
  20. 60819   I%=256:NEXT:W=A%+1:GOSUB *BLB_WIN_WSET:X=X-W(0):Y=Y-W(1):RETURN
  21. 60820 *BLB_WIN_OPEN
  22. 60821  IF LEN(BLB_WIN$)=BLB_WIN_MAX THEN W=-1:RETURN
  23. 60822  W=INSTR(BLB_WIN_EXIST$,"0"):BLB_WIN$=CHR$(W)+BLB_WIN$
  24. 60823  FOR I%=0 TO 9:BLB_WIN%(W-1,I%)=W(I%):NEXT:BLB_WINTITLE$(W-1)=W$
  25. 60824  MID$(BLB_WIN_EXIST$,W,1)="1":GOSUB *BLB_WIN_DRAW:RETURN
  26. 60825 *BLB_WIN_CLOSE
  27. 60826  IF BLB_WIN$="" THEN RETURN
  28. 60827  W=ASC(BLB_WIN$):GOSUB *BLB_WIN_WSET
  29. 60828  BLB_V%(0)=W(0):BLB_V%(1)=W(1):BLB_V%(2)=W(0)+W(2)-1:BLB_V%(3)=W(1)+W(3)-1
  30. 60829  GOSUB *BLB_WIN_BACKDRAW
  31. 60830  MID$(BLB_WIN_EXIST$,W,1)="0":BLB_WIN$=MID$(BLB_WIN$,2)
  32. 60831  RETURN
  33. 60832 *BLB_WIN_MOVE
  34. 60833  IF BLB_WIN$="" THEN RETURN
  35. 60834  W=ASC(BLB_WIN$):GOSUB *BLB_WIN_WSET:BLB_WIN%(W-1,0)=X:BLB_WIN%(W-1,1)=Y
  36. 60835  GET@A(W(0),W(1))-(W(0)+W(2)-1,W(1)+W(3)-1),BLB_WINPTN%,BLB_WINMEM&*(W-1)
  37. 60836  IF W(0)<0 OR W(0)+W(2)>BLB_RESO_X OR W(1)+W(3)>BLB_RESO_Y THEN
  38. 60837   BLB_MEM%(0)=X:BLB_MEM%(1)=Y:FOR I%=0 TO 9:BLB_MEM%(I+2)=W(I%):NEXT
  39. 60838   GOSUB *BLB_WIN_DRAW:X=BLB_MEM%(0):Y=BLB_MEM%(1)
  40. 60839   FOR I%=0 TO 9:W(I%)=BLB_MEM%(I+2):NEXT
  41. 60840  ELSE
  42. 60841   PUT@A(X,Y)-(X+W(2)-1,Y+W(3)-1),BLB_WINPTN%,,,,,BLB_WINMEM&*(W-1)
  43. 60842  ENDIF
  44. 60843  BLB_V%(0)=W(0):BLB_V%(2)=W(0)+W(2)-1
  45. 60844  IF ABS(W(0)-X)>=W(2) OR ABS(W(1)-Y)>W(3)-2 THEN
  46. 60845   BLB_V%(1)=W(1):BLB_V%(3)=W(1)+W(3)-1:GOSUB *BLB_WIN_BACKDRAW
  47. 60846  ELSE
  48. 60847   FOR I%=0 TO 3:BLB_MEM%(I%)=W(I%):NEXT
  49. 60848   IF Y<W(1) THEN
  50. 60849    BLB_V%(1)=Y+W(3)-1:BLB_V%(3)=W(1)+W(3)-1:GOSUB *BLB_WIN_BACKDRAW
  51. 60850   ELSE IF Y>W(1) THEN
  52. 60851    BLB_V%(1)=W(1):BLB_V%(3)=Y:GOSUB *BLB_WIN_BACKDRAW
  53. 60852   ENDIF
  54. 60853   FOR I%=0 TO 3:W(I%)=BLB_MEM%(I%):NEXT
  55. 60854   IF Y<W(1) THEN BLB_V%(1)=W(1):BLB_V%(3)=Y+W(3)-1 ELSE BLB_V%(1)=Y:BLB_V%(3)=W(1)+W(3)-1
  56. 60855   IF X>W(0) THEN
  57. 60856    BLB_V%(0)=W(0):BLB_V%(2)=X:GOSUB *BLB_WIN_BACKDRAW
  58. 60857   ELSE IF X<W(0) THEN
  59. 60858    BLB_V%(0)=X+W(2)-1:BLB_V%(2)=W(0)+W(2)-1:GOSUB *BLB_WIN_BACKDRAW
  60. 60859   ENDIF
  61. 60860  ENDIF
  62. 60861  W=ASC(BLB_WIN$):GOSUB *BLB_WIN_WSET:LINE(W(0),W(1))-STEP(W(2)-1,W(3)-1),PSET,%8,B
  63. 60862  RETURN
  64. 60863 *BLB_WIN_SIZE
  65. 60864  IF BLB_WIN$="" THEN RETURN
  66. 60865  W=ASC(BLB_WIN$):GOSUB *BLB_WIN_WSET:IF W(2)=X AND W(3)=Y THEN RETURN
  67. 60866  IF X<W(4) OR X>W(6) OR Y<W(5) OR Y>W(7) THEN RETURN
  68. 60867  BLB_WIN%(W-1,2)=X:BLB_WIN%(W-1,3)=Y:BLB_V%(0)=W(2):BLB_V%(1)=W(3):GOSUB *BLB_WIN_DRAW
  69. 60868  W(2)=BLB_V%(0):W(3)=BLB_V%(1):IF X>=W(2) AND Y>=W(3) THEN RETURN
  70. 60869  IF X>=W(2) AND Y<W(3) THEN
  71. 60870   BLB_V%(0)=W(0):BLB_V%(1)=W(1)+Y-1:BLB_V%(2)=W(0)+W(2)-1:BLB_V%(3)=W(1)+W(3)-1
  72. 60871  ELSE IF X<W(2) AND Y>=W(3) THEN
  73. 60872   BLB_V%(0)=W(0)+X-1:BLB_V%(1)=W(1):BLB_V%(2)=W(0)+W(2)-1:BLB_V%(3)=W(1)+W(3)-1
  74. 60873  ELSE IF X<W(2) AND Y<W(3) THEN
  75. 60874   BLB_V%(0)=W(0):BLB_V%(1)=W(1)+Y-1:BLB_V%(2)=W(0)+W(2)-1:BLB_V%(3)=W(1)+W(3)-1
  76. 60875   A%=W(2):GOSUB *BLB_WIN_BACKDRAW
  77. 60876   BLB_V%(0)=W(0)+X-1:BLB_V%(1)=W(1):BLB_V%(2)=W(0)+A%-1:BLB_V%(3)=W(1)+Y-1
  78. 60877  ENDIF
  79. 60878  GOSUB *BLB_WIN_BACKDRAW:LINE(W(0),W(1))-STEP(W(2)-1,W(3)-1),PSET,%8,B:RETURN
  80. 60879 *BLB_WIN_CHANGE
  81. 60880  IF BLB_WIN$="" THEN RETURN
  82. 60881  IF W<1 OR W>BLB_WIN_MAX OR W=ASC(BLB_WIN$) THEN RETURN
  83. 60882  I%=INSTR(BLB_WIN$,CHR$(W)):IF I%=0 THEN RETURN
  84. 60883  BLB_WIN$=CHR$(W)+LEFT$(BLB_WIN$,I%-1)+MID$(BLB_WIN$,I%+1)
  85. 60884  PUT@A(W(0),W(1))-(W(0)+W(2)-1,W(1)+W(3)-1),BLB_WINPTN%,,,,,BLB_WINMEM&*(W-1):RETURN
  86. 60885 *BLB_WIN_DRAW
  87. 60886  GOSUB *BLB_WIN_WSET
  88. 60887  MOUSE 1,,,0:LINE(W(0),W(1))-STEP(W(2)-1,W(3)-1),PSET,%8,BF,7
  89. 60888  LINE(W(0),W(1))-STEP(W(2)-1,15),PSET,%8,BF
  90. 60889  LINE(W(0)+LEN(BLB_WINTITLE$(W-1))*6+40,W(1)+1)-(W(0)+W(2)-2,W(1)+14),PSET,1,BF
  91. 60890  CONNECT(W(0),W(1)+W(3)-2)-STEP(W(2)-3,0)-STEP(0,2-W(3))-STEP(1,0)-STEP(0,W(3)-2),%8
  92. 60891  SYMBOL(W(0)+24,W(1)+2),BLB_WINTITLE$(W-1),.75!,.75!,7
  93. 60892  IF (W(8) AND 2)=0 THEN
  94. 60893   LINE(W(0)+2,W(1)+2)-STEP(11,11),PSET,7,BF,%6
  95. 60894   LINE STEP(0,0)-STEP(-11,-11),PSET,7:LINE STEP(11,0)-STEP(-11,11),PSET,7
  96. 60895  ENDIF
  97. 60896  GOSUB *BLB_WIN_USERDRAW:GOSUB *BLB_WIN_GTOMEM:MOUSE 1,,,1:RETURN
  98. 60897 *BLB_WIN_BACKDRAW
  99. 60898  IF BLB_V%(0)<0 THEN IF BLB_V%(2)<1 THEN RETURN ELSE BLB_V%(0)=0
  100. 60899  IF BLB_V%(1)<0 THEN BLB_V%(1)=0 ELSE IF BLB_V%(1)>BLB_RESO_Y-2 THEN RETURN
  101. 60900  IF BLB_V%(0)>BLB_RESO_X-2 THEN RETURN
  102. 60901  IF BLB_V%(2)>BLB_RESO_X-2 THEN BLB_V%(2)=BLB_RESO_X-1
  103. 60902  IF BLB_V%(3)>BLB_RESO_Y-2 THEN BLB_V%(3)=BLB_RESO_Y-1
  104. 60903  MOUSE 1,,,0:VIEW(BLB_V%(0),BLB_V%(1))-(BLB_V%(2),BLB_V%(3)),%6
  105. 60904  WINDOW(BLB_V%(0),BLB_V%(1))-(BLB_V%(2),BLB_V%(3))
  106. 60905  W=ASC(BLB_WIN$):GOSUB *BLB_WIN_WSET:I%=LEN(BLB_WIN$)
  107. 60906  WHILE I%>1:W=ASC(MID$(BLB_WIN$,I%,1))-1:I%=I%-1
  108. 60907   PUT@A(BLB_WIN%(W,0)-BLB_V%(0),BLB_WIN%(W,1)-BLB_V%(1))-(BLB_WIN%(W,0)+BLB_WIN%(W,2)-1-BLB_V%(0),BLB_WIN%(W,1)+BLB_WIN%(W,3)-1-BLB_V%(1)),BLB_WINPTN%,,,,,BLB_WINMEM&*W
  109. 60908  WEND
  110. 60909  W=ASC(BLB_WIN$):GOSUB *BLB_WIN_WSET:VIEW:WINDOW:MOUSE 1,,,1:RETURN
  111. 60910 *BLB_WIN_WSET
  112. 60911  FOR I%=0 TO 9:W(I%)=BLB_WIN%(W-1,I%):NEXT:RETURN
  113. 60912 *BLB_WIN_GTOMEM
  114. 60913  W=ASC(BLB_WIN$):GOSUB *BLB_WIN_WSET
  115. 60914  GET@A(W(0),W(1))-(W(0)+W(2)-1,W(1)+W(3)-1),BLB_WINPTN%,BLB_WINMEM&*(W-1):RETURN
  116. 60915 *BLB_WIN_WORK
  117. 60916  IF MOUSE(2,0)=0 OR BLB_WIN$="" THEN RETURN
  118. 60917  X=MOUSE(0):Y=MOUSE(1):GOSUB *BLB_WIN_POS:IF W<0 THEN WHILE MOUSE(2,0):WEND:RETURN
  119. 60918  IF W<>ASC(BLB_WIN$) THEN GOSUB *BLB_WIN_CHANGE:RETURN
  120. 60919  IF X>W(2)-4 OR Y<16 OR Y>W(3)-3 THEN
  121. 60920   IF X>0 AND Y>1 AND X<13 AND Y<14 AND (W(8) AND 2)=0 THEN
  122. 60921    B%=0:WHILE MOUSE(2,0):X=MOUSE(0)-W(0):Y=MOUSE(1)-W(1)
  123. 60922     A%=(X>1)*(X<13)*(Y>1)*(Y<13)
  124. 60923     IF A%<>B% THEN LINE(W(0)+2,W(1)+2)-STEP(11,11),XOR,%7,BF:B%=A%
  125. 60924    WEND:IF B%=1 THEN GOSUB *BLB_WIN_CLOSE
  126. 60925   ELSE IF Y<16 AND (W(8)AND 1)=0 THEN
  127. 60926    MOUSEPAT=3:GOSUB *BLB_MOUSEPAT
  128. 60927    MOUSE 4,0,Y-(BLB_MENUBAR_XLONG%>0)*20,BLB_RESO_X-1,BLB_RESO_Y-9
  129. 60928    LINE(W(0),W(1))-STEP(W(2)-1,W(3)-1),XOR,%7,B
  130. 60929    C%=X:D%=Y:WHILE MOUSE(2,0):A%=MOUSE(0)-W(0):B%=MOUSE(1)-W(1)
  131. 60930     IF A%<>C% OR B%<>D% THEN
  132. 60931      LINE(W(0)-X+C%,W(1)-Y+D%)-STEP(W(2)-1,W(3)-1),XOR,%7,B:C%=A%:D%=B%
  133. 60932      LINE(W(0)-X+C%,W(1)-Y+D%)-STEP(W(2)-1,W(3)-1),XOR,%7,B
  134. 60933     ENDIF
  135. 60934    WEND:LINE(W(0)-X+C%,W(1)-Y+D%)-STEP(W(2)-1,W(3)-1),XOR,%7,B
  136. 60935    MOUSEPAT=0:GOSUB *BLB_MOUSEPAT:MOUSE 4,0,0,BLB_RESO_X-1,BLB_RESO_Y-1
  137. 60936    IF X<>C% OR Y<>D% THEN X=W(0)-X+C%:Y=W(1)-Y+D%:GOSUB *BLB_WIN_MOVE
  138. 60937   ELSE IF (X>W(2)-4 OR Y>W(3)-3) AND (W(8) AND 4)=0 THEN
  139. 60938    A%=W(0)+W(4)+X-W(2)+1:B%=W(1)+W(5)+Y-W(3):C%=W(0)+W(6)+X-W(2):D%=W(1)+W(7)+Y-W(3)
  140. 60939    A%=-A%*(A%>=0):B%=-B%*(B%>=0):IF C%>BLB_RESO_X-2 THEN C%=BLB_RESO_X-1
  141. 60940    IF D%>BLB_RESO_Y-2 THEN D%=BLB_RESO_Y-1
  142. 60941    MOUSEPAT=4:GOSUB *BLB_MOUSEPAT:LINE(W(0),W(1))-STEP(W(2)-1,W(3)-1),XOR,%7,B
  143. 60942    MOUSE 4,A%,B%,C%,D%:C%=X:D%=Y:WHILE MOUSE(2,0):A%=MOUSE(0)-W(0):B%=MOUSE(1)-W(1)
  144. 60943     IF A%<>C% OR B%<>D% THEN
  145. 60944      LINE(W(0),W(1))-STEP(W(2)-X+C%-1,W(3)-Y+D%-1),XOR,%7,B:C%=A%:D%=B%
  146. 60945      LINE(W(0),W(1))-STEP(W(2)-X+C%-1,W(3)-Y+D%-1),XOR,%7,B
  147. 60946     ENDIF
  148. 60947    WEND:MOUSEPAT=0:GOSUB *BLB_MOUSEPAT:LINE(W(0),W(1))-STEP(W(2)-X+C%-1,W(3)-Y+D%-1),XOR,%7,B
  149. 60948    MOUSE 4,0,0,BLB_RESO_X-1,BLB_RESO_Y-1:X=W(2)-X+C%:Y=W(3)-Y+D%:GOSUB *BLB_WIN_SIZE
  150. 60949   ENDIF
  151. 60950  ELSE
  152. 60951   GOSUB *BLB_WIN_USER:WHILE MOUSE(2,0):WEND
  153. 60952  ENDIF
  154. 60953  RETURN
  155. 60954 *BLB_WIN_USER
  156. 60955  '┌───────────────────────────────────┐
  157. 60956  '│以下に、ウィンドウ内がマウスでクリックされた場合に行う処理を          │
  158. 60957  '│記述してください。                                                    │
  159. 60958  '│ウィンドウの座標は(W(0),W(1))~(W(0)+W(2)-1,W(1)+W(3)-1)です。    │
  160. 60959  '│ウィンドウについての情報は登録時と同じ形式で W() に収録されています。 │
  161. 60960  '└───────────────────────────────────┘
  162. 60980  RETURN
  163. 60981 *BLB_WIN_USERDRAW
  164. 60982  '┌───────────────────────────────────┐
  165. 60983  '│以下に、ウィンドウ内に描画するルーチンを記述してください。            │
  166. 60984  '│ウィンドウの座標は(W(0),W(1))~(W(0)+W(2)-1,W(1)+W(3)-1)です。    │
  167. 60985  '│ウィンドウについての情報は登録時と同じ形式で W() に収録されています。 │
  168. 60986  '│  (例) SYMBOL(W(0)+16,W(1)+32),STR$(W),3,3,3                          │
  169. 60987  '└───────────────────────────────────┘
  170. 60999  RETURN
  171.